1 module unde.games.dizzy.omega.animations.stones;
2 
3 import derelict.opengl3.gl;
4 import std.conv;
5 import std.format;
6 import std.math;
7 import std.stdio;
8 import unde.games.collision_detector;
9 import unde.games.dizzy.omega.dizzy;
10 import unde.games.dizzy.omega.main;
11 import unde.games.object;
12 import unde.games.renderer;
13 import unde.global_state;
14 
15 class Stones:StaticGameObject
16 {
17     this(MainGameObject root)
18     {
19         frame = -1;
20         
21         models["stones-1"] = root.models["stones-1"];
22         models["stones-2"] = root.models["stones-2"];
23         
24         DizzyOmega dz = cast(DizzyOmega) root;
25         dz.collision_objects["solid"]["Stones1"] =
26             dz.collision_objects["temp-solid"]["Stones1"];
27 
28         super(root);
29     }
30 
31     override void draw(GlobalState gs)
32     {
33         DizzyOmega dz = cast(DizzyOmega) root;
34 
35         if (abs(root.scrx - 434.0) > 35.0 || abs(root.scry + 70.0) > 16.0)
36             return;
37 
38         glPushMatrix();
39         if (frame < 0)
40         {
41             recursive_render(gs, models["stones-1"]);
42         }
43         else
44         {
45             recursive_render(gs, models["stones-2"]);
46         }
47         glPopMatrix();
48     }
49     
50     override bool tick(GlobalState gs)
51     {
52         DizzyOmega dz = cast(DizzyOmega) root;
53         
54         if (frame >= 0 && root.frame - frame == 0)
55         {
56             dz.collision_objects["solid"]["Stones2"] =
57                 dz.collision_objects["temp-solid"]["Stones2"];
58             dz.collision_objects["solid"]["Stones1"] = null;
59             dz.collision_objects["solid"].remove("Stones1");
60             reset_collision_cache();
61         }
62 
63         return true;
64     }
65 
66     override void load(string[string] s)
67     {
68         string p = "stones";
69         if (p in s)
70             frame = s[p].to!(long);
71         else
72             frame = -1;
73 
74         DizzyOmega dz = cast(DizzyOmega) root;
75         if (frame < 0)
76         {
77             dz.collision_objects["solid"]["Stones1"] =
78                 dz.collision_objects["temp-solid"]["Stones1"];
79             dz.collision_objects["solid"]["Stones2"] = null;
80             dz.collision_objects["solid"].remove("Stones2");
81             reset_collision_cache();
82         }
83         else
84         {
85             dz.collision_objects["solid"]["Stones2"] =
86                 dz.collision_objects["temp-solid"]["Stones2"];
87             dz.collision_objects["solid"]["Stones1"] = null;
88             dz.collision_objects["solid"].remove("Stones1");
89             reset_collision_cache();
90         }
91     }
92 
93     override void save(ref string[string] s)
94     {
95         if (frame >= 0)
96         {
97             string p = "stones";
98             s[p] = frame.to!(string);
99         }
100     }    
101 }